package com.ssy.lingxi.logistics.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.logistics.api.dto.request.CommonIdRequest;
import com.ssy.lingxi.logistics.api.dto.request.CommonIdsRequest;
import com.ssy.lingxi.logistics.api.dto.response.ShipperAddressDetailResponse;
import com.ssy.lingxi.logistics.model.request.ShipperAddressRequest;
import com.ssy.lingxi.logistics.model.request.StoreShipperAddressListRequest;
import com.ssy.lingxi.logistics.model.response.ShipperAddressListResponse;
import com.ssy.lingxi.logistics.model.response.ShipperAddressResponse;
import com.ssy.lingxi.logistics.model.response.StoreShipperAddressListResponse;

import java.util.List;

/**
 * 发货地址服务类
 *
 * @author yzc
 * @version 2.0.0
 * @date 2020/7/13
 */
public interface IShipperAddressService {

    /**
     * 发货地址分页列表
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<ShipperAddressListResponse>> pageShipperAddress(PageVO request, UserLoginCacheDTO loginUser);

    /**
     * 发货地址查询
     * @param id 主键id
     * @return 返回结果
     */
    Wrapper<ShipperAddressResponse> getShipperAddress(Long id);

    /**
     * 发货地址添加
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<ShipperAddressResponse> addShipperAddress(ShipperAddressRequest request, UserLoginCacheDTO loginUser);

    /**
     * 发货地址修改
     * @param request 接口参数
     * @param loginUser 登录用户信息
     */
    Wrapper<Void> updateShipperAddress(ShipperAddressRequest request, UserLoginCacheDTO loginUser);

    /**
     * 发货地址删除
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> deleteShipperAddress(CommonIdRequest request, UserLoginCacheDTO loginUser);

    /**
     * 内部接口 - 发货地址查询
     * @param id 主键id
     * @return 返回结果
     */
    Wrapper<ShipperAddressDetailResponse> getShipperAddressDetail(Long id);

    /**
     * 内部接口 - 发货地址查询
     * @param idsRequest 主键id
     * @return 返回结果
     */
    Wrapper<List<ShipperAddressDetailResponse>> listShipperAddress(CommonIdsRequest idsRequest);

    /**
     * 门店发货地址列表
     * @param request 接口参数
     * @return 返回结果
     */
    Wrapper<List<StoreShipperAddressListResponse>> storeShipperAddressList(StoreShipperAddressListRequest request);
}
